package SchoolProject.Main.Product;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import SchoolProject.JavaBean.InputMessage;
import SchoolProject.JavaBean.ProductMessage;

public class inputMehod
{
    public static void menu() throws IOException
    {
        String filePath = "src\\SchoolProject\\file\\InputMessage.txt";
        ArrayList<InputMessage> list=new ArrayList<>();
        loadFromFile(list, filePath);
        loop:
        while (true) {
            System.out.println("------------欢迎使用入站管理系统------------");
            System.out.println("1：添加货物");
            System.out.println("2：删除货物");
            System.out.println("3：修改货物");
            System.out.println("4：查询货物");
            System.out.println("5：退出");
            System.out.print("请输入您的选择：");
            Scanner sc = new Scanner(System.in);
            String choose = sc.next();
            switch (choose) {
                case "1":
                    //添加
                    addProduct(list);
                    break;
                case "2":
                    //删除
                    deletProduct(list);
                    break;
                case "3":
                    //修改
                    changeProduct(list);
                    break;
                case "4":
                    //查询
                    findProduct(list);

                    break;
                case "5":
                    System.out.println("正在退出");
                    saveToFile(list, filePath);
                    moveData();
                    //System.exit(0);//停止虚拟机运行
                    break loop;
                //        ****
                default:
                    System.out.println("0");
                    break;
            }
        }
    }
    private static void moveData() throws IOException
    {

        BufferedReader  br = new BufferedReader(new FileReader("src\\SchoolProject\\file\\InputMessage.txt"));
        String temp ;

        while ((temp = br.readLine()) != null)
        {
            System.out.println(temp);
            String tempID= temp.split(",")[1];

            ProductMessage p =  Product.getProductMessageFromId(tempID);
            if (p==null)
            {
                System.out.println("error:存在未找到的ID!!!");
                System.out.println("这个非法而又不正义的ID为:"+tempID);
                System.out.println("已删除这个非法ID!");
            }else {
                System.out.println("找到"+p.getProductName());
                BufferedReader br2 = new BufferedReader(new FileReader("src\\SchoolProject\\file\\ProductMessage.txt"));
                String  temp2 = br2.readLine();

                String tempID2= temp2.split(",")[0];
                if (tempID2.equals(tempID))
                    System.out.println("找到"+p.getProductName()+"的ID是"+tempID);
                    Product.updateProduct(p,Integer.parseInt(temp.split(",")[2]),"add");


            }
        }
        br.close();

        File file = new File("src\\SchoolProject\\file\\InputMessage.txt");
        file.delete();
        file.createNewFile();

        System.out.println("数据转移完毕");
    }


    private static void changeProduct(ArrayList<InputMessage> list) {
        System.out.println("===== 修改货物 =====");
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入入库编号");
        String inputID=sc.next();
        int index=checkInputID(list,inputID);
        if (index==-1){
            System.out.println("未找到");

        }else {
            System.out.println("查找到入库编号为"+inputID+"的货物");
            System.out.println("请选择你要修改的信息");
            System.out.println("1：入库数量");
            System.out.println("2：入库日期");
            System.out.println("3：供应商");
            int choice=sc.nextInt();
            switch (choice){
                case 1:
                {
                    changeNum(list,index);
                    break;
                }
                case 2:
                {
                    changeDate(list,index);
                    break;
                }
                case 3:
                {
                    changeSupplier(list,index);
                    break;
                }
                default:
                {
                    System.out.println("选型不存在");
                    break;
                }
            }
        }
    }
    // 将集合中的数据写入文件（保存）
    public static void saveToFile(ArrayList<InputMessage> list, String filePath) {
        try (BufferedWriter writer = new BufferedWriter(new java.io.FileWriter(filePath))) {
            for (InputMessage item : list) {
                // 每个字段用逗号分隔，注意转义特殊字符（如逗号本身）
                String line = item.getInputID() + "," +
                        item.getProductID() + "," +
                        item.getInputNum() + "," +
                        item.getInputDate() + "," +
                        item.getSupplier();
                writer.write(line);
                writer.newLine(); // 换行
            }
            System.out.println("数据已成功保存到文件：" + filePath);
        } catch (java.io.IOException e) {
            System.err.println("保存文件时出错：" + e.getMessage());
        }
    }

    // 从文件读取数据到集合（加载）
    public static void loadFromFile(ArrayList<InputMessage> list, String filePath) {
        java.io.File file = new java.io.File(filePath);
        if (!file.exists()) {
            System.out.println("文件不存在，将创建新文件。");
            return; // 文件不存在，不加载，直接返回空集合
        }

        try (java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                // 按逗号分割每一行
                String[] parts = line.split(",");
                if (parts.length == 5) { // 确保字段数量正确
                    InputMessage item = new InputMessage();
                    item.setInputID(parts[0]);
                    item.setProductID(parts[1]);
                    item.setInputNum(Integer.parseInt(parts[2]));
                    item.setInputDate(parts[3]);
                    item.setSupplier(parts[4]);
                    list.add(item);
                } else {
                    System.err.println("文件格式错误，跳过该行：" + line);
                }
            }
            System.out.println("数据已从文件加载到内存。");
        } catch (java.io.IOException e) {
            System.err.println("读取文件时出错：" + e.getMessage());
        } catch (NumberFormatException e) {
            System.err.println("数字解析错误，可能是入库数量格式不对：" + e.getMessage());
        }
    }

    private static void changeNum(ArrayList<InputMessage> list, int index) {
        InputMessage temp=list.get(index);
        System.out.println("请输入修改后的数量");
        Scanner sc=new Scanner(System.in);
        temp.setInputNum(sc.nextInt());
        System.out.println("修改成功");
    }
    private static void changeDate(ArrayList<InputMessage> list, int index) {
        InputMessage temp = list.get(index);
        // 🆕 校验入库日期格式
        loop:
        while (true) {
            System.out.println("请输入修改后的日期(例:YYYY-MM-DD)");
            Scanner sc = new Scanner(System.in);
            String inputDate = sc.next();
            if (isDateValid(inputDate)) {
                temp.setInputDate(inputDate);
                break loop; // 日期合法，跳出循环
            } else {
                System.out.println("日期格式错误，请按照 YYYY-MM-DD 格式输入，例如：2024-04-30");
            }
        }
        System.out.println("修改成功");
    }
    private static void changeSupplier(ArrayList<InputMessage> list, int index) {
        InputMessage temp=list.get(index);
        System.out.println("请输入修改后的供应商");
        Scanner sc=new Scanner(System.in);
        temp.setSupplier(sc.next());
        System.out.println("修改成功");
    }

    private static void deletProduct(ArrayList<InputMessage> list) {
        System.out.println("===== 删除货物 =====");
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入入库编号");
        String inpuID=sc.next();
        int index=checkInputID(list,inpuID);
        if (index==-1){
            System.out.println("未找到");
        }else {
            list.remove(index);
            System.out.println("删除成功");
        }

    }
    private static void findProduct(ArrayList<InputMessage> list) {
        Scanner sc = new Scanner(System.in);
        loop: while (true) {
            System.out.println("===== 查询货物 =====");
            System.out.println("1. 按入库编号查询");
            System.out.println("2. 按商品编号查询");
            System.out.println("3. 按入库日期查询");
            System.out.println("4. 返回上一级");
            System.out.print("请选择查询方式：");
            int choice = sc.nextInt();

            String key; // 查询关键字
            int index = -1; // 查找结果索引

            switch (choice) {
                case 1:
                    // 按入库编号查询
                    System.out.println("请输入入库编号");
                    key = sc.next();
                    index = checkInputID(list, key); // 调用已有方法检查入库编号
                    break;

                case 2:
                    // 按商品编号查询
                    System.out.println("请输入商品编号");
                    key = sc.next();
                    index = checkProductID(list, key); // 调用已有方法检查商品编号
                    break;

                case 3:
                    // 按入库日期查询
                    System.out.println("请输入入库日期(例:YYYY-MM-DD)");
                    key = sc.next();
                    index = checkInputDate(list, key); // 调用已有方法检查入库日期
                    break;

                case 4:
                    break loop; // 返回上一级菜单

                default:
                    System.out.println("无效的选择，请重新输入");
                    continue loop; // 回到循环开始，重新选择
            }
            // 通用逻辑：如果找到匹配项，打印结果；否则提示未找到
            if (index == -1) {
                System.out.println("未找到匹配的货物记录");
            } else {
                InputMessage foundItem = list.get(index);
                System.out.println("入库编号\t\t商品编号\t\t入库日期");
                System.out.println(foundItem.getInputID() + "\t\t\t" +
                        foundItem.getProductID() + "\t\t\t" +
                        foundItem.getInputDate());
            }
        }
    }

    private static void addProduct(ArrayList<InputMessage> list) {
        Scanner sc = new Scanner(System.in);
        InputMessage ip = new InputMessage();
        System.out.println("===== 入库货物 =====");

        // 输入入库编号并校验唯一性
        loop1:
        while (true) {
            System.out.println("请输入入库编号");
            String inputID = sc.next();
            if (isInputIDUnique(list, inputID)) {
                ip.setInputID(inputID);
                break loop1; // 唯一，跳出循环
            } else {
                System.out.println("入库编号已存在，请重新输入！");
            }
        }

        // 输入商品编号并校验唯一性
        loop2:
        while (true) {
            System.out.println("请输入商品编号");
            String productID = sc.next();
            if (isProductIDUnique(list, productID)) {
                ip.setProductID(productID);
                break loop2; // 唯一，跳出循环
            } else {
                System.out.println("商品编号已存在，请重新输入！");
            }
        }

        System.out.println("请输入入库数量");
        ip.setInputNum(sc.nextInt());

        // 🆕 校验入库日期格式（之前已经加过）
        loop3:
        while (true) {
            System.out.println("请输入入库日期(例:YYYY-MM-DD)");
            String inputDate = sc.next();
            if (isDateValid(inputDate)) {
                ip.setInputDate(inputDate);
                break loop3;
            } else {
                System.out.println("日期格式错误，请按照 YYYY-MM-DD 格式输入，例如：2024-04-30");
            }
        }

        System.out.println("请输入供应商名称");
        ip.setSupplier(sc.next());

        // 添加到集合
        list.add(ip);
        System.out.println("录入成功");
    }
    public static int checkInputID(ArrayList<InputMessage> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            InputMessage temp = list.get(i);
            if (temp.getInputID().equals(id)) {
                return i;
            }
        }
        return -1;
    }
    public static int checkProductID(ArrayList<InputMessage> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            InputMessage temp = list.get(i);
            if (temp.getProductID().equals(id)) {
                return i;
            }
        }
        return -1;
    }
    public static int checkInputDate(ArrayList<InputMessage> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            InputMessage temp = list.get(i);
            if (temp.getInputDate().equals(id)) {
                return i;
            }
        }
        return -1;
    }
    /**
     * 使用正则表达式检查日期格式是否合法（格式：YYYY-MM-DD）
     */
    public static boolean isDateValid(String date) {
        String dateRegex = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$";
        return date.matches(dateRegex);
    }
    /**
     * 检查入库编号是否已经存在（唯一性校验）
     */
    public static boolean isInputIDUnique(ArrayList<InputMessage> list, String inputID) {
        for (InputMessage item : list) {
            if (item.getInputID().equals(inputID)) {
                return false; // 已存在，不唯一
            }
        }
        return true; // 唯一
    }
    /**
     * 检查商品编号是否已经存在（唯一性校验）
     */
    public static boolean isProductIDUnique(ArrayList<InputMessage> list, String productID) {
        for (InputMessage item : list) {
            if (item.getProductID().equals(productID)) {
                return false; // 已存在，不唯一
            }
        }
        return true; // 唯一
    }
}
